import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { fileURLToPath, URL } from 'node:url';
import { resolve } from 'path';
import sass from 'sass-embedded'; // 使用ESM方式导入
import { nodeResolve } from '@rollup/plugin-node-resolve';
import { nodePolyfills } from 'vite-plugin-node-polyfills';

// Vite配置导出
export default defineConfig({
  define: {
    'import.meta.env.VITE_DEV_SERVER_URL': JSON.stringify(process.env.VITE_DEV_SERVER_URL)
  },
  // 插件配置
  plugins: [
    vue(), // Vue3单文件组件支持
    nodeResolve({
      preferBuiltins: true
    }),
    nodePolyfills({
      globals: {
        process: true,
        Buffer: true
      }
    })
  ],
  // css: {
  //   postcss: resolve(__dirname, 'postcss.config.js')
  // },
  css: {
    postcss: './postcss.config.mjs'
  },
  // 基础路径配置（Electron必须使用相对路径）
  base: './',
  publicDir: resolve(__dirname, 'public'),
  server: {
    host: '0.0.0.0', // 监听所有地址
    port: 8080, // 端口号
    open: false, // 自动打开浏览器
    cors: true, // 允许跨域
    proxy: {
        '/api': {
          target: 'http://localhost:3000',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
      }
    },
    hmr: {
      overlay: false // 禁用错误覆盖层 
    }
  },
  root: resolve(__dirname, 'src/renderer'),
  // 模块解析配置
  resolve: {
    alias: {
      // 路径别名配置（方便导入组件）
      '@': fileURLToPath(new URL('./src/renderer/src', import.meta.url)),
      '~': fileURLToPath(new URL('./src', import.meta.url)),
      'lowdb/lib/adapters/node/TextFile': 'lowdb/lib/adapters/browser/index.js',
    },
    // 自动扩展文件名 
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.node', '.vue'],
  },
 
  // 构建配置
  build: {
    emptyOutDir: false, // 不清空输出目录（防止与其他进程构建冲突）
    outDir: resolve(__dirname, '.vite/build/renderer'), // 构建输出目录
    
    // Rollup打包配置
    rollupOptions: {
      // 入口文件配置
      input: {
        // main: resolve(__dirname, 'src/renderer/index.html'), // HTML主入口
        // // Add explicit JS entry if needed
        // renderer: resolve(__dirname, 'src/renderer/src/main.js')
        index: fileURLToPath(new URL('./src/renderer/index.html',  import.meta.url))  // 显式指定入口 
      },
      external: [
        'node:fs',
        'node:path',
        'node:fs/promises',
        'lowdb/lib/adapters/node/TextFile',
        '@vue/runtime-dom',
        '@vue/devtools-api',
        'electron'  // 添加Electron相关排除
      ],
      // 添加以下external配置
      // external: [
      //   'node:url',
      //   'node:path',
      //   'node:fs/promises',
      //   'steno',
      //   // 添加其他需要排除的Node.js核心模块
      //   'electron',
      //   'electron-store',
      //   'lowdb/lib/adapters/node/TextFile',
      //   'lowdb'
      // ],
      
      targets: [
        'es2015'
      ],
      // 添加以下output配置
      output: {
        format: 'es',
        generatedCode: 'es2015',
        interop: 'auto'
      }
    }
  },
  optimizeDeps: {
    exclude: [
      'steno',
      'lowdb',
      'electron-store'
    ],
    include: [
    ],
    esbuildOptions: {
      loader: {
        '.js': 'jsx'
      }
    }
  },
});